Lua Plugin Snippets
Besides these examples, you'll want to read http://flyingmeat.com/fs/contrib/voodoopad/VPPlugin.h for information on what is available. It's just an Objective-C header file, but it's what we've got to go on for now :)
List all the page names in the current document to the current page.
textView = windowController:textView()
document = windowController:document()
enum = document:keys():objectEnumerator()
pageKey = enum:nextObject()
while pageKey do
pageKey = nsToLuaString(enum:nextObject())
textView:insertText(pageKey .. "\n")
end
Creating a new page named "Lua Rocks"
document = windowController:document()
textView = windowController:textView()
document:createNewVPDataWithKey("Lua Rocks")
textView:insertText("Lua Rocks")
Printing out the contents of the index page (to Console.app)
document = windowController:document()
vpdata = document:vpDataForKey("index")
pageText = nsToLuaString(vpdata:dataAsAttributedString():string())
print(pageText)
Lookup the page data for the current page, and change it's contents.
(Note: this is not undoable)
document = windowController:document()
currentPageKey = windowController:key()
pageData = document:vpDataForKey(currentPageKey)
attributedString = pageData:dataAsAttributedString()
attributedString:mutableString():setString("It's all gone!")
pageData:setDataAsAttributedString(attributedString)
Tell the text view to select all, and then insert the text "Hi".
(This is undoable)
windowController:textView():selectAll()
windowController:textView():insertText("Hi")
Display a dialog box.
This example displays a dialog box with a default button that says "Go Away"
nsAlert("Hello", "This is a message", "Go Away", nil, nil)
Highlight the selected text yellow.
(this will work best as a plugin, since the Run as Lua Script option deselects the currently selected text before running the script)
textView = windowController:textView()
color = objc.class("NSColor"):yellowColor()
textView:textStorage():addAttribute_value_range_("NSBackgroundColor", color, textView:selectedRange())
Create a page index.
document = windowController:document()
textView = windowController:textView()
pageKey = nil
enum = document:keys():objectEnumerator()
pageKey = enum:nextObject()
while pageKey do
-- the display name isn't currently public in 2.5.1, but I'll try and fix that for 2.5.2
displayName = document:vpDataForKey(pageKey):displayName()
textView:insertText(displayName)
textView:insertText("\n")
pageKey = enum:nextObject()
end
Change the font for the current page.
textView = windowController:textView()
f = objc.class("NSFont"):fontWithName_size("Monaco", 10)
attrs = objc.class("NSMutableDictionary"):alloc():init():autorelease()
attrs:setObject_forKey(f, "NSFont")
range = luaToNSRange({location=0, length=textView:string():length()})
textView:textStorage():setAttributes_range(attrs, range)
Change the font for the current selection.
textView = windowController:textView()
font = objc.class("NSFont"):fontWithName_size("Helvetica", 14)
textView:textStorage():addAttribute_value_range_("NSFont", font, textView:selectedRange())